package com.company.ljh.medium;

import java.util.ArrayList;
import java.util.List;

/**
 * @description: 17. 电话号码的字母组合
 * 给定一个仅包含数字 2-9 的字符串，返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
 *
 * 给出数字到字母的映射如下（与电话按键相同）。注意 1 不对应任何字母。
 * @projectName:leet_code
 * @see:com.company.ljh.medium
 * @author:ljh
 * @createTime:2023/10/19 17:18
 * @version:1.0
 */
public class 电话号码的字母组合 {
    //主要注意7和9包括四个字母
    private static String[] charMap=new String[]{"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
    public List<String> letterCombinations(String digits) {
        List<String> result = new ArrayList();
        char[] digitArray = digits.toCharArray();
        getLetter(digitArray,0,"",result);
        return result;
    }
    public void getLetter(char [] digitArray,int index,String preStr,List<String> result){
        if(digitArray.length == 0){
            return;
        }
        //'0'-'0'即为0
        String charStr = charMap[(digitArray[index] - '2')];
        if(index == digitArray.length - 1){
            for(int i = 0;i < charStr.length();i++ ){
                result.add(preStr + charStr.charAt(i));
            }
        }else{
            for(int i = 0;i < charStr.length();i++ ){
                getLetter(digitArray,index + 1,preStr + charStr.charAt(i),result);
            }
        }
    }
}
